____ _ _ _ _
| _ \ ___ | |_ (_) _ __ ___ __| | (_) __ _
| |_) | / _ \ | __| | | | '_ \ / _ \ / _| | | | / _ |
| _ < | __/ | |_ | | | |_) | | __/ | (_| | | | | (_| |
|_| \_\ \___| \__| |_| | .__/ \___| \__,_| |_| \__,_|
|_|
- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b
ÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻ
ErfĂźllbarkeitsproblem der Aussagenlogik
ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
top
Das ErfĂźllbarkeitsproblem der Aussagenlogik (SAT, von englisch satisfiability âErfĂźllbarkeitâ) ist ein Entscheidungsproblem der theoretischen Informatik. Es beschäftigt sich mit der Frage, ob eine gegebene aussagenlogische Formel F {\displaystyle F} erfĂźllbar ist. Mit anderen Worten: Existiert eine Belegung der Variablen von F {\displaystyle F} mit den Werten wahr oder falsch, sodass F {\displaystyle F} zu wahr ausgewertet wird?
SAT gehĂśrt zur Komplexitätsklasse NP der Probleme, die von einer nichtdeterministischen Turingmaschine in polynomieller Zeit gelĂśst werden kĂśnnen. AuĂerdem war SAT das erste Problem, fĂźr das NP-Vollständigkeit nachgewiesen wurde (Satz von Cook). Damit kann jedes Problem aus NP in polynomieller Zeit auf SAT zurĂźckgefĂźhrt werden (Polynomialzeitreduktion). NP-vollständige Probleme stellen also eine Art obere Schranke fĂźr die Schwierigkeit von Problemen in NP dar.
Eine deterministische Turingmaschine (etwa ein konventioneller Computer) kann SAT in exponentieller Zeit entscheiden, zum Beispiel durch das Aufstellen einer Wahrheitstabelle. Es ist kein effizienter Algorithmus fßr SAT bekannt und es wird allgemein vermutet, dass ein solcher Polynomialzeitalgorithmus nicht existiert. Die Frage, ob SAT in polynomieller Zeit gelÜst werden kann, ist äquivalent zum P-NP-Problem, einem der bekanntesten offenen Probleme der theoretischen Informatik.
Ein GroĂteil der Forschung beschäftigt sich mit der Entwicklung mĂśglichst effizienter Verfahren zur LĂśsung von SAT in der Praxis (sogenannter SAT-Solver). Moderne SAT-Solver kĂśnnen Instanzen mittlerer Schwierigkeit mit hunderten Millionen Variablen oder Klauseln in praktikabler Zeit lĂśsen.cite-ref-1[1] Das ist ausreichend fĂźr praktische Anwendungen, z. B. in der formalen Verifikation,cite-ref-verification-2-0[2] in der kĂźnstlichen Intelligenz,cite-ref-10-5555-145448-146725-3-0[3] in der Electronic Design Automationcite-ref-10-1145-337292-337611-4-0[4] und in verschiedenen Planungs- und Schedulingalgorithmen.cite-ref-10-2991-icmse-18-2018-126-5-0[5]
Sie gehĂśren zu den Constraint Satisfaction Problems (CSP).
Contents
⢠Terminologie
⢠3-SAT
⢠P3-SAT
⢠MAX-SAT
⢠MAJ-SAT
⢠QBF (QSAT)
⢠Algorithmen
⢠Lokale Suche
⢠Parallelisierung
⢠Portfolio
⢠Cube-And-Conquer
⢠Praxis
⢠Siehe auch
⢠Einzelnachweise
ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
Terminologie
Eine aussagenlogische Formel besteht aus Variablen, Klammern und den aussagenlogischen VerknĂźpfungen Konjunktion (âundâ, oft notiert mit â§), Disjunktion (âoderâ, â¨) und Negation (ânichtâ, ÂŹ). Eine Variable kann entweder den Wert wahr oder den Wert falsch annehmen. Ein Literal ist ein Auftreten einer Variable (positives Literal) oder ihrer Negation (negatives Literal). Ein Literal heiĂt pur, wenn es nur in einer Ausprägung, also entweder positiv oder negativ, vorkommt. Ein Monom ist eine endliche Menge von Literalen, die ausschlieĂlich konjunktiv verknĂźpft sind. Eine Klausel ist eine endliche Menge von Literalen, die ausschlieĂlich disjunktiv verknĂźpft sind. Eine Einheitsklausel ist eine Klausel, die nur aus einem einzelnen Literal besteht. Eine Horn-Klausel ist eine Klausel mit hĂśchstens einem positiven Literal.
Eine aussagenlogische Formel ist in konjunktiver Normalform (KNF), wenn sie nur aus Konjunktionen von Klauseln besteht. Eine Horn-Formel ist eine konjunktive Normalform, die ausschlieĂlich aus Horn-Klauseln besteht. Die Formel ( x 1 ⨠⨠ ÂŹ x 2 ) â§ â§ ( ÂŹ ÂŹ x 1 ⨠⨠x 2 ⨠⨠x 3 ) â§ â§ ÂŹ ÂŹ x 1 {\displaystyle (x_{1}\lor \lnot x_{2})\land (\lnot x_{1}\lor x_{2}\lor x_{3})\land \lnot x_{1}} befindet sich in konjunktiver Normalform. Da nur die erste und die dritte Klausel Horn-Klauseln sind, ist sie aber keine Horn-Formel. Die dritte Klausel ist eine Einheitsklausel.
Eine aussagenlogische Formel ist in disjunktiver Normalform (DNF), wenn sie nur aus Disjunktionen von Monomen besteht. Die Formel ( x 1 ⧠⧠  x 2 ) ⨠⨠(   x 1 ⧠⧠x 2 ⧠⧠x 3 ) ⨠⨠  x 1 {\displaystyle (x_{1}\land \lnot x_{2})\lor (\lnot x_{1}\land x_{2}\land x_{3})\lor \lnot x_{1}} befindet sich in disjunktiver Normalform.
Definition und Varianten
Eine Formel F {\displaystyle F} heiĂt genau dann erfĂźllbar, wenn eine Zuweisung von Werten wahr oder falsch zu jeder Variable existiert, sodass die Formel wahr ist. Formal ist SAT definiert als die formale Sprache
S A T = { F | F {\displaystyle SAT=\{F\ |\ F} ist aussagenlogische Formel und erfĂźllbar } {\displaystyle \}}
In der Praxis versteht man unter SAT meistens das Problem, herauszufinden ob eine Formel F {\displaystyle F} erfßllbar ist. Es existieren zahlreiche Varianten und fßr die meisten Komplexitätsklassen existiert eine Variante von SAT, die bezßglich dieser Klasse vollständig ist.
Polynomiell entscheidbare Varianten von SAT
⢠HORNSAT beschränkt SAT auf Horn-Formeln, das heiĂt auf Formeln in konjunktiver Normalform bei der jede Klausel hĂśchstens ein positives Literal enthält. HORNSAT ist P-vollständig und in Linearzeit entscheidbar.cite-ref-6[6]
⢠DNF-SAT beschränkt SAT auf Formeln, die in disjunktiver Normalform gegeben sind. DNF-SAT ist in polynomieller Zeit entscheidbar, da eine in DNF gegebene Formel genau dann erfßllbar ist, wenn es ein Monom gibt das keine komplementären Literale enthält.
⢠2-SAT beschränkt SAT auf Formeln, deren Klauseln maximal 2 Literale enthalten. 2-SAT ist in Linearzeit entscheidbar.cite-ref-7[7]
3-SAT
Das Problem 3-SAT schränkt die Anzahl Literale auf 3 Literale pro Klausel ein. Trotz dieser Einschränkung ist 3-SAT NP-vollständig, da SAT sich in polynomieller Zeit auf 3-SAT reduzieren lässt. Dasselbe gilt fßr alle Probleme k-SAT mit k > 3.
P3-SAT
MAX-SAT
MAJ-SAT
MAJ-SAT ist das Problem zu entscheiden, ob die Mehrzahl aller mÜglichen Variablenbelegungen die Formel erfßllt. MAJ-SAT ist PP-vollständig.cite-ref-9[9]
QBF (QSAT)
Algorithmen
Da SAT NP-vollständig ist, sind ausschlieĂlich Exponentialzeitalgorithmen fĂźr SAT bekannt. Seit den 2000er Jahren werden aber effiziente und skalierbare Algorithmen (SAT-Solver) entwickelt, die praktikables SAT-Solving fĂźr zahlreiche Anwendungen erlauben. Beispiele fĂźr Anwendungen sind formale Verifikation,cite-ref-verification-2-1[2] KĂźnstliche Intelligenz,cite-ref-10-5555-145448-146725-3-1[3] Electronic Design Automationcite-ref-10-1145-337292-337611-4-1[4] und verschiedene Planungs- und Schedulingalgorithmen.cite-ref-10-2991-icmse-18-2018-126-5-1[5]
SAT-Solver kĂśnnen aufgrund ihrer Funktionsweise in verschiedene Klassen eingeteilt werden.
Ein grundlegender randomisierter Algorithmus zur LÜsung des k-SAT-Problems stammt von Uwe SchÜning (1999), die Randomisierung konnte später von Robin A. Moser vollständig entfernt werden (um 2009). Der schnellste bekannte (randomisierte) Algorithmus fßr allgemeines k-SAT ist PPSZ (Ramamohan Paturi, Pavel Pudlåk, Michael E. Saks, Francis Zane),cite-ref-10[10]cite-ref-11[11] entstanden aus dem Vorläufer PPZ von 1999, der nicht so gut wie der Algorithmus von SchÜning war, und basierend auf Encoding. 2014 gab Timon Hertli Verbesserungen fßr den Fall unique 3-SAT.cite-ref-12[12]
Backtracking und DPLL
Der Davis-Putnam-Logemann-Loveland-Algorithmus (DPLL oder DLL) aus den 1960er Jahren war der erste SAT-Solver, der eine systematische Suche mittels Backtracking implementierte.cite-ref-13[13]cite-ref-14[14] Er ist nicht zu verwechseln mit dem Davis-Putnam-Algorithmus, auf dem er basiert. Viele moderne Ansätze basieren auf dem gleichen Konzept und optimieren oft lediglich die Effizienz des Algorithmus fßr bestimmte Klassen von Eingaben, wie z. B. zufällige SAT-Instanzen oder Instanzen, die in Anwendungen der Industrie auftreten.cite-ref-15[15] DPLL lÜst das CNF-SAT-Problem. Das bedeutet, die aussagenlogischen Formeln mßssen in der konjunktiven Normalform vorliegen (Menge von Klauseln).
Ein grundlegender Backtracking-Algorithmus fĂźr eine Formel F {\displaystyle F} funktioniert wie folgt:
1. Wähle ein Literal l {\displaystyle l} aus F {\displaystyle F} .
2. Weise l {\displaystyle l} einen Wahrheitswert wahr oder falsch zu.
3. Vereinfache F {\displaystyle F} zu F l {\displaystyle F_{l}} , indem alle Klauseln entfernt werden, die nun wahr sind und alle Literale entfernt werden, die nun falsch sind.
4. Splitting Rule. PrĂźfe rekursiv, ob F l {\displaystyle F_{l}} erfĂźllbar ist.
⢠F l {\displaystyle F_{l}} ist erfßllbar ⚠⚠{\displaystyle \implies } F {\displaystyle F} ist erfßllbar.
⢠F l {\displaystyle F_{l}} ist nicht erfßllbar: Weise l {\displaystyle l} den komplementären Wahrheitswert zu. Vereinfache und prßfe dann erneut rekursiv, ob die resultierende Formel F   l {\displaystyle F_{\lnot l}} erfßllbar ist. Ist F   l {\displaystyle F_{\lnot l}} erfßllbar, so ist auch F {\displaystyle F} erfßllbar. Ist F   l {\displaystyle F_{\lnot l}} nicht erfßllbar, so ist auch F {\displaystyle F} nicht erfßllbar.
Der Algorithmus terminiert, wenn eine Klausel leer wird (nicht erfĂźllbar, ihr letztes Literal wurde falsch) oder wenn alle Variablen belegt sind (erfĂźllbar).
DPLL verbessert den simplen Backtracking-Algorithmus durch zwei Regeln.
Einheitsresolution (Unit Propagation)
Tritt eine Einheitsklausel Ď Ď {\displaystyle \psi } auf, so muss ihr einziges Literal wahr sein. Weise dem Literal den entsprechenden Wahrheitswert zu und entferne alle Klauseln, die Ď Ď {\displaystyle \psi } enthalten. Entferne Vorkommen des Literals ÂŹ ÂŹ Ď Ď {\displaystyle \lnot \psi } aus allen Klauseln.
In der Praxis fĂźhrt Einheitsresolution oft dazu, dass wiederum Einheitsklauseln erzeugt werden und somit der naive Suchraum signifikant verkleinert wird.
Pure Literal Elimination
Kommt ein Literal als pures Literal vor, so kann ihm ein Wert zugewiesen werden, sodass alle Klauseln, die das Literal enthalten, wahr werden. Entferne diese Klauseln.
Der Algorithmus zusammengefasst im Pseudocode:
function DPLL(FÂ : set of clauses)
# Konsistent bedeutet, es kommt ausschlieĂlich ÂŹl oder l vor
if F is a consistent set of literals then
# Hier kÜnnen zusätzlich die Literale zurßckgegeben werden
return true;
if F contains an empty clause then
return false;
for every unit clause {l} in F do
F â unit-propagate(l, F);
for every literal l that occurs pure in F do
F â pure-literal-assign(l, F);
l â choose-literal(F);
# Mit Kurzschlussauswertung fĂźr das Oder
return DPLL({FÂ : l = true}) or DPLL({FÂ : l = true}); #
Dabei wenden unit-propagate(l, F) und pure-literal-assign(l, F) die beiden Regeln entsprechend an und geben die vereinfachte Formel zurĂźck.
Die Effizienz von DPLL hängt sehr stark von der Auswahl des Literals l {\displaystyle l} (Branching Literal) ab. Fßr manche Instanzen kann diese Wahl den Unterschied zwischen konstanter und exponentieller Laufzeit ausmachen.cite-ref-16[16] Darum definiert DPLL vielmehr eine ganze Familie von Algorithmen, die unterschiedliche Heuristiken fßr die Wahl von l {\displaystyle l} verwenden.
Die Probleme von DPLL kĂśnnen in drei Punkten zusammengefasst werden:
1. Die Entscheidungen fĂźr Branching Literals werden naiv getroffen.
2. Aus Konflikten wird nichts gelernt, auĂer dass die aktuelle (partielle) Variablenbelegung zu einem Konflikt fĂźhrt. Dabei lassen sich mehr Informationen Ăźber die Ursache des Konfliktes extrahieren und so groĂe Teile des Suchraumes ausschlieĂen.
3. Backtracking springt nur jeweils eine Ebene im Suchbaum nach oben, was zu einem sehr groĂen Suchraum fĂźhrt.
In der Praxis werden diese Probleme gelĂśst durch
1. Heuristiken, z. B. in einem Look-Ahead-Solver
2. Clause Learning (CDCL)
3. Backjumping (CDCL)
Conflict-Driven Clause Learning (CDCL)
Modernes Conflict-driven Clause Learning (CDCL) erweitert DPLL um die Konzepte Clause Learning und Backjumping, implementiert Two Watched Literals (TWL, 2WL), um die Suche nach Einheitsklauseln zu beschleunigen und verwendet Random Restarts, um schwierigen Situationen nach einer Reihe von schlechten Entscheidungen fĂźr Variablenbelegungen zu entfliehen.
Backjumping und Clause Learning
Bei CDCL findet das Backtracking nicht mehr chronologisch statt, sondern es werden Ebenen des Suchbaumes Ăźbersprungen. AuĂerdem werden Informationen Ăźber Variablenbelegungen, die in Kombination einen Konflikt verursachen, als Klausel der Klauselmenge hinzugefĂźgt.
Um Backjumping zu ermĂśglichen, merkt sich CDCL, welche Zuweisungen von Wahrheitswerten zu Variablen willkĂźrlich waren und welche Zuweisungen durch Unit Propagation erzwungen wurden. In der Praxis funktioniert das mittels eines Implikationsgraphen.
Ein Implikationsgraph ist ein gerichteter, azyklischer Graph G = ( V , E ) {\displaystyle G=(V,E)} . Jeder Knoten v â â V {\displaystyle v\in V} besteht dabei aus einem Tupel ( x â â { f a l s e , t r u e } , d ) {\displaystyle (x\in \{false,true\},\ d)} oder einem Element c {\displaystyle c} . Während das Tupel fĂźr eine Zuweisung von wahr oder falsch fĂźr ein Literal x {\displaystyle x} auf Ebene d {\displaystyle d} des Suchbaumes steht, steht c {\displaystyle c} fĂźr einen aufgetretenen Konflikt. Ein Konflikt tritt auf, wenn ein Literal gleichzeitig den Wert wahr und den Wert falsch annehmen mĂźsste.
Wenn der Algorithmus ein Literal willkßrlich mit einem Wahrheitswert belegt, wird der entsprechende Knoten v {\displaystyle v} mit dem Tupel, das diese Zuweisung repräsentiert, zu G {\displaystyle G} hinzugefßgt. Erzwingt diese Zuweisung durch Unit Propagation eine weitere Zuweisung, so wird ein weiterer Knoten w {\displaystyle w} und eine Kante e = ( v , w ) {\displaystyle e=(v,w)} zum Graphen hinzugefßgt.
Im Folgenden ein Beispiel mit der Formel: ( x 1 {\displaystyle x_{1}} ⨠x 4 {\displaystyle x_{4}} ) ⧠( x 1 {\displaystyle x_{1}} ⨠  x 3 {\displaystyle \lnot x_{3}} ⨠  x 8 {\displaystyle \lnot x_{8}} ) ⧠( x 1 {\displaystyle x_{1}} ⨠x 8 {\displaystyle x_{8}} ⨠x 12 {\displaystyle x_{12}} ) ⧠( x 2 {\displaystyle x_{2}} ⨠x 11 {\displaystyle x_{11}} ) ⧠(   x 7 {\displaystyle \lnot x_{7}} ⨠  x 3 {\displaystyle \lnot x_{3}} ⨠x 9 {\displaystyle x_{9}} ) ⧠(   x 7 {\displaystyle \lnot x_{7}} ⨠x 8 {\displaystyle x_{8}} ⨠  x 9 {\displaystyle \lnot x_{9}} ) ⧠( x 7 {\displaystyle x_{7}} ⨠x 8 {\displaystyle x_{8}} ⨠  x 10 {\displaystyle \lnot x_{10}} ) ⧠( x 7 {\displaystyle x_{7}} ⨠x 1 {\displaystyle x_{1}} ⨠  x 12 {\displaystyle \lnot x_{12}} )
1. Wähle x 1 {\displaystyle x_{1}} willkßrlich und belege es (wieder willkßrlich) mit false.
2. Unit Propagation erzwingt eine Belegung von x 4 {\displaystyle x_{4}} mit true. Damit wird die Klausel ( x 1 {\displaystyle x_{1}} ⨠x 4 {\displaystyle x_{4}} ) wahr.
3. Wähle x 3 {\displaystyle x_{3}} und belege es mit true.
4. Unit Propagation erzwingt nun die Belegung von x 8 {\displaystyle x_{8}} mit false (wegen x 1 {\displaystyle x_{1}} = false). Die Klausel ( x 1 {\displaystyle x_{1}} ⨠  x 3 {\displaystyle \lnot x_{3}} ⨠  x 8 {\displaystyle \lnot x_{8}} ) wird wahr.
5. Unit Propagation erzwingt die Belegung von x 12 {\displaystyle x_{12}} mit true (wegen x 8 {\displaystyle x_{8}} = false). Die Kausel ( x 1 {\displaystyle x_{1}} ⨠x 8 {\displaystyle x_{8}} ⨠x 12 {\displaystyle x_{12}} ) wird wahr.
6. Wähle x 2 {\displaystyle x_{2}} und belege es mit false.
7. Unit Propagation erzwingt nun die Belegung von x 11 {\displaystyle x_{11}} mit true. Die Klausel ( x 2 {\displaystyle x_{2}} ⨠x 11 {\displaystyle x_{11}} ) wird wahr.
8. Wähle x 7 {\displaystyle x_{7}} und belege es mit true. Die Klauseln ( x 7 {\displaystyle x_{7}} ⨠x 8 {\displaystyle x_{8}} ⨠  x 10 {\displaystyle \lnot x_{10}} ) und ( x 7 {\displaystyle x_{7}} ⨠x 1 {\displaystyle x_{1}} ⨠  x 12 {\displaystyle \lnot x_{12}} ) werden wahr.
9. Ein Konflikt tritt auf fßr x 9 {\displaystyle x_{9}} . Unit Propagation muss die Klauseln (   x 7 {\displaystyle \lnot x_{7}} ⨠  x 3 {\displaystyle \lnot x_{3}} ⨠x 9 {\displaystyle x_{9}} ) ⧠(   x 7 {\displaystyle \lnot x_{7}} ⨠x 8 {\displaystyle x_{8}} ⨠  x 9 {\displaystyle \lnot x_{9}} ) erfßllen, die inzwischen zu x 9 {\displaystyle x_{9}} ⧠  x 9 {\displaystyle \lnot x_{9}} reduziert wurden. Der Konfliktknoten c {\displaystyle c} wird in den Implikationsgraphen eingefßgt.
Der Algorithmus analysiert nun den Konflikt mithilfe des Implikationsgraphen und entscheidet, welche Klausel gelernt werden soll und zu welchem Entscheidungslevel im Suchbaum zurĂźckgesprungen werden soll. In Frage kommende Klauseln heiĂen conflict clause und sollen verhindern, dass die Fehlentscheidung des Algorithmus, die zum Konflikt gefĂźhrt hat, wiederholt wird. Eine solche conflict clause wird zur Klauselmenge hinzugefĂźgt. Das maximale Entscheidungslevel der Variablen aus der conflict clause bestimmt das Entscheidungslevel fĂźr das Backjumping.
Eine abstrakte Beschreibung von CDCL im Pseudocode sieht wie folgt aus:cite-ref-17[17]
function CDCL(FÂ : set of clauses)
G <- Implikationsgraph();
if unit-propagate(F, G) findet Konflikt then
return false;
level â 0;
while F hat nicht zugewiesene Variablen do
level â level + 1;
choose-literal(F, G);
while unit-propagate(F, G) findet Konflikt do
# Ermittle Ebene fĂźr Backjump und zu lernende Klausel
(d, c) â analyzeConflict(G);
# Lerne
F â F ⪠{c};
# Wenn der Konflikt nicht aufgelĂśst werden kann
if d < 0 then
return false;
else
backjump(F, d);
level â d;
return true;
Dabei aktualisieren unit-propagate(F, G) und choose-literal(F, G) jeweils entsprechend den Implikationsgraphen. Die Funktion analyzeConflict(G) wird durch die Strategie des clause learning bestimmt.
Conflict Clauses
Um eine conflict clause zu ermitteln untersucht man Schnitte im Implikationsgraphen. Ein Schnitt generiert eine conflict clause genau dann, wenn er den Graph so in zwei Hälften partitioniert, dass eine Hälfte (die decision side) alle decision nodes enthält und die andere Hälfte den Konfliktknoten. Die decision nodes sind dabei die willkßrlichen Entscheidungen, die zum Konflikt gefßhrt haben.
Aus dem Implikationsgraphen wird ersichtlich, dass z. B. fĂźr x 3 {\displaystyle x_{3}} und x 7 {\displaystyle x_{7}} eine willkĂźrliche Entscheidung getroffen wurde, aber die Entscheidung fĂźr die Belegung von x 8 {\displaystyle x_{8}} eine Konsequenz aus der Entscheidung fĂźr die Belegung von x 1 {\displaystyle x_{1}} und x 3 {\displaystyle x_{3}} war. Die Knoten fĂźr x 1 {\displaystyle x_{1}} , x 3 {\displaystyle x_{3}} , x 7 {\displaystyle x_{7}} sind also die decision nodes.
Ein Beispiel fßr einen Schnitt, der eine conflict clause generiert, ist ein Schnitt durch die eingehenden Kanten des Konfliktknotens (roter Schnitt in der Abbildung). Die Knoten auf der decision side repräsentieren die Ursache des Konfliktes, nämlich x 3 ⧠⧠x 7 ⧠⧠  x 8 ⚠⚠K o n f l i k t {\displaystyle x_{3}\land x_{7}\land \lnot x_{8}\implies Konflikt} . Durch Kontraposition erhält man   K o n f l i k t ⚠⚠  x 3 ⨠⨠  x 7 ⨠⨠x 8 {\displaystyle \lnot Konflikt\implies \lnot x_{3}\lor \lnot x_{7}\lor x_{8}} , ein Beispiel fßr eine conflict clause. Eine andere MÜglichkeit stellt der blaue Schnitt durch die ausgehenden Kanten der decision nodes dar. Er generiert die conflict clause   x 1 ⨠⨠x 3 ⨠⨠x 7 {\displaystyle \lnot x_{1}\lor x_{3}\lor x_{7}} . Diese Variante wurde in Rel_satcite-ref-18[18] implementiert, einem der ersten CDCL SAT-Solver.cite-ref-19[19] Eine fortgeschrittene Variante wird von der Implementierung GRASPcite-ref-20[20] eingesetzt.
Two Watched Literals (TWL, 2WL)
Es bleibt das Problem, Einheitsklauseln fĂźr die Unit Propagation und Konflikte effizient zu finden. Lange Zeit haben Solver dafĂźr die Anzahl Literale, die in einer Klausel noch nicht mit Wahrheitswerten belegt worden sind, mitgezählt. Wenn sich dieser Zähler von 2 auf 1 ändert wendet man Unit Propagation an. Da uns der genaue Wert des Zählers aber eigentlich nicht interessiert, sondern wir nur wissen mĂźssen, wann sich die Zahl auf eins ändert, verfolgen wir nicht die Klauseln selbst, sondern jeweils zwei Literale pro Klausel â die two watched literals. TWL ist also eine Datenstruktur, die die Suche nach Konflikten oder Einheitsklauseln beschleunigt.
Jede Klausel, die noch nicht erfĂźllt ist, besitzt zwei watched literals. Die Information wird dabei nicht von den Klauseln gespeichert, sondern von den Literalen selbst. Jeder Literal l {\displaystyle l} besitzt also eine Liste mit Klauseln, in denen er vorkommt. Diese Klauseln werden in einer Liste verkettet, der watch list.
Die TWL einer Klausel erfĂźllen folgende Invariante:
âSolange kein Konflikt gefunden wurde darf ein watched literal nur false sein, solange der andere watched literal true ist und alle unwatched literals false sind.âcite-ref-21[21]
Die Invariante fĂźhrt dazu, dass die Belegung eines unwatched literals mit einem Wahrheitswert niemals zu einer unit propagation oder einem Konflikt fĂźhren wird. Wenn wir nun aber einem watched literal l {\displaystyle l} einen Wahrheitswert zuweisen, mĂźssen wir eventuell die Invariante reparieren, unit propagation anwenden oder einen Konflikt auflĂśsen. Betrachten wir die Klauseln, in denen die Negation von l {\displaystyle l} , also ÂŹ ÂŹ l {\displaystyle \lnot l} vorkommt. Diese kĂśnnen durch die watch list effizient gefunden werden. Wir verfahren fĂźr diese wie folgt:
1. Ist der andere watched literal der Klausel true, mĂźssen wir nichts tun.
2. Ist einer der unwatched literals l Ⲡ{\displaystyle l'} der Klausel nicht false, wählen wir l Ⲡ{\displaystyle l'} als watched literal, der   l {\displaystyle \lnot l} ersetzt.
3. Ist der andere watched literal l Ⲡ{\displaystyle l'} fßr diese Klausel noch nicht mit einem Wahrheitswert belegt, fßhre unit propagation fßr l Ⲡ{\displaystyle l'} durch. Ansonsten ist l Ⲡ{\displaystyle l'} false und ein Konflikt wurde gefunden.
TWL wurde fĂźr den SAT-Solver Chaffcite-ref-22[22] entwickelt, um die unit propagation in der Praxis zu optimieren.
Random Restart
Random Restarts setzen alle Variablenbelegungen zurßck und starten die Suche mit einer anderen Reihenfolge der Variablenbelegung neu. Damit wird das Problem umgangen, dass manche dieser Zuweisungsreihenfolgen zu sehr viel länger andauernden Berechnungen mit vielen Konflikten fßhren, während geeignete Reihenfolgen das Problem schneller lÜsen. Dabei werden gelernte Klauseln und die aktuell zugewiesenen Werte der Variablen ßbernommen. Wann ein Restart durchgefßhrt wird bestimmt eine Strategie, z. B. fixed nach n Konflikten, in Abständen, die einer Reihe wie der geometrischen Reihe folgen oder dynamisch, wenn sich Konflikte beginnen zu häufen. Restart-Strategien sind häufig an eine bestimmte Klasse von Instanzen angepasst und aggressivere Strategien haben sich in vielen Fällen als effizient herausgestellt.cite-ref-23[23]
Lokale Suche
SAT-Solver, die auf dem Prinzip der lokalen Suche basieren, fĂźhren im Grunde folgende Schritte aus:
1. Weise jeder Variable einen Zufallswert true oder false zu.
2. Wenn alle Klauseln erfĂźllt sind, terminiere und gebe die Variablenbelegung zurĂźck.
3. Ansonsten negiere eine Variable und wiederhole.
Die aussagenlogische Formel ist dabei als konjunktive Normalform gegeben. Unterschiede zwischen SAT-Solvern, die lokale Suche implementieren, finden sich vor allem bei der Wahl der Variable, die negiert wird.
GSATcite-ref-24[24] negiert die Variable, die die Zahl an nicht erfßllten Klauseln minimiert oder wählt mit einer gewissen Wahrscheinlichkeit eine zufällige Variable.
WalkSATcite-ref-25[25] wählt eine zufällige, nicht erfßllte Klausel und negiert eine Variable. Dabei wird die Variable ausgewählt, die am wenigsten bereits erfßllte Klauseln nicht erfßllt werden lässt. Die Wahrscheinlichkeit, dass eine falsche Variablenzuweisung korrigiert wird, ist der Kehrwert der Anzahl der Variablen in der Klausel. Mit einer gewissen Wahrscheinlichkeit wird auch hier einfach eine zufällige Variable der Klausel ausgewählt.
Beide Varianten erlauben zufällige Zuweisungen mit einer gewissen Wahrscheinlichkeit, um das Problem der lokalen Maxima zu umgehen. AuĂerdem werden zufällige Neustarts erlaubt, wenn fĂźr eine zu lange Zeit keine LĂśsung gefunden wurde.
Parallelisierung
â
Hauptartikel
:
Parallele Algorithmen fĂźr das ErfĂźllbarkeitsproblem
Parallele SAT-Solver kĂśnnen in drei Kategorien eingeteilt werden: Portfolio, Divide-and-conquer und parallele lokale Suche.
Portfolio
Portfolio SAT-Solver beruhen auf der Tatsache, dass die meisten SAT-Solver auf bestimmten Probleminstanzen effizient sind, aber auf anderen Instanzen langsamer sind als andere Algorithmen. Gegeben eine beliebige Instanz von SAT, so gibt es keine verlässliche MÜglichkeit, um vorherzusagen, welcher Algorithmus die Instanz am schnellsten lÜsen wird. Der Portfolio-Ansatz verwendet nun verschiedene Ansätze parallel, um die Vorteile verschiedener SAT-Solver zu kombinieren. Ein Nachteil der Methode ist natßrlich, dass alle parallelen Prozesse im Prinzip die gleiche Arbeit verrichten. Trotzdem haben sich Portfolio-Solver in der Praxis als effizient herausgestellt.
Cube-And-Conquer
Divide-and-conquer Algorithmen beruhen auf dem Ansatz, ein Problem in kleinere Teilprobleme aufzuteilen, diese rekursiv zu bearbeiten und die Teilergebnisse zu kombinieren. DPLL und CDCL sind divide-and-conquer Algorithmen, die den Suchraum bei jeder Entscheidung fßr eine Variablenbelegung in zwei Hälften aufteilen. Durch unit propagation und pure literal elimination kÜnnen diese Hälften aber sehr unterschiedlich schwer zu lÜsende Teilinstanzen von SAT darstellen. CDCL verschärft dieses Problem durch die Anwendung weiterer Techniken. Cube-and-conquer ist ein Ansatz, der dieses Problem in zwei Phasen lÜst.
1. Cube Phase. Die Instanz von SAT wird von einem SAT-Solver in viele (einige Tausend bis einige Millionen) Teilprobleme aufgeteilt, sogenannte WĂźrfel. Ein WĂźrfel ist dabei eine Konjunktion einer Teilmenge der Literale der Originalformel F.
2. Konjunktiv mit F verknßpft ergibt sich eine neue Formel F', die unabhängig von den anderen Teilproblemen gelÜst werden kann (z. B. CDCL). Die Disjunktion aller F' ist äquivalent zu F. Der Algorithmus terminiert also, sobald ein Teilproblem erfßllbar ist.
Fßr die Cube Phase wird in der Regel ein Look-Ahead-Solver eingesetzt, da diese sich fßr kleine, aber schwere Probleme bewährt haben und globaler arbeiten als z. B. CDCL.cite-ref-26[26]
Parallele lokale Suche
Parallele lokale Suche ist leicht zu parallelisieren: Flips von verschiedenen Variablen werden parallel durchgefĂźhrt oder ein Portfolio-Ansatz wird verwendet, indem unterschiedliche Strategien fĂźr die Variablenauswahl gleichzeitig angewandt werden.
Praxis
⢠Sequentielle Performance (teilweise existieren separate Wettbewerbe fßr bestimmte Klassen von Instanzen, z. B. Instanzen aus dem Automated Planning)
⢠MäĂige Parallelisierung auf einer einzelnen Maschine mit Shared Memory
⢠Massive Parallelisierung auf verteilten Maschinen
⢠Inkrementelle SAT-Solver, also SAT-Solving fßr Anwendungen, die mehrere LÜsungsschritte benÜtigen. Dabei wird eine Sequenz verwandter SAT-Instanzen gelÜst, wobei bereits gelernte Informationen aus frßheren Instanzen wiederverwendet werden.cite-ref-29[29]
Die SAT-Association ist eine Vereinigung, die sich zum Ziel gesetzt hat, Forschung im Bereich SAT, SAT-Solver und der formalen Verifikation voranzubringen und die SAT-Community zu repräsentieren.cite-ref-30[30] Sie beaufsichtigt die Organisation der genannten Konferenzen und Wettbewerbe und gibt das Journal on Satisfiability, Boolean Modeling, and Computation (JSAT) heraus.cite-ref-31[31]
Siehe auch
Einzelnachweise
cite-note-11. â SAT Competition 2020. Abgerufen am 9. November 2020.
cite-note-verification-22. â Randal E. Bryant, Steven German, Miroslav N. Velev: Microprocessor Verification Using Efficient Decision Procedures for a Logic of Equality with Uninterpreted Functions. In: Lecture Notes in Computer Science. Springer, Berlin / Heidelberg 1999, ISBN 3-540-66086-0, S. 1â13.
cite-note-10-1145-337292-337611-44. â JoĂŁo P. Marques-Silva, Karem A. Sakallah: Boolean satisfiability in electronic design automation. In: Proceedings of the 37th Annual Design Automation Conference (= DAC â00). Association for Computing Machinery, Los Angeles CA 2000, ISBN 1-58113-187-9, S. 675â680, doi:10.1145/337292.337611.
cite-note-10-2991-icmse-18-2018-126-55. â Hong Huang, Shaohua Zhou: An efficient SAT algorithm for complex job-shop scheduling. In: Proceedings of the 2018 8th International Conference on Manufacturing Science and Engineering (ICMSE 2018). Atlantis Press, Paris 2018, ISBN 978-94-6252-502-3, doi:10.2991/icmse-18.2018.126.
cite-note-88. â Christos Papadimitriou: Computational Complexity. Addison-Wesley, 1994.
cite-note-99. â Pierluigi Crescenzi, Daniel Pierre Bovet: Introduction to the theory of complexity. Prentice Hall, New York 1994, ISBN 0-13-915380-2.
cite-note-1010. â Paturi, PudlĂ k, Saks, Zane, An improved exponential-time algorithm for K-SAT, J. ACM, Band 52, 2005, S. 337â364
cite-note-1111. â Dominik Schweder, John P. Steinberger, PPSZ for General k-SAT â Making Hertliâs Analysis Simpler and 3-SAT Faster, 2017, Online
cite-note-1212. â Hertli: Breaking the PPSZ Barrier for Unique 3-SAT. In: Javier Esparza, Pierre Fraigniaud, Thore Husfeldt, Elias Koutsoupias (Hrsg.): Automata, Languages, and Programming â 41st International Colloquium, ICALP 2014, Kopenhagen, Juli 2014. Teil 1: Proceedings, Part I: Lecture Notes in Computer Science 8572. Springer 2014, S. 600â611
cite-note-1717. â Emina Torlak: A Modern SAT Solver Lecture, University of Washington. (PDF) Abgerufen am 8. November 2020 (englisch).
cite-note-1818. â Roberto J. Bayardo, Robert Schrag: Using CSP look-back techniques to solve exceptionally hard SAT instances. In: Lecture Notes in Computer Science. Springer, Berlin / Heidelberg 1996, ISBN 3-540-61551-2, S. 46â60.
cite-note-2121. â Mathias Fleury, Jasmin Christian Blanchette, Peter Lammich: A verified SAT solver with watched literals using imperative HOL. In: Proceedings of the 7th ACM SIGPLAN International Conference on Certified Programs and Proofs â CPP 2018. ACM Press, New York NY 2018, ISBN 978-1-4503-5586-5, doi:10.1145/3167080.
cite-note-2222. â Matthew W. Moskewicz, Conor F. Madigan, Ying Zhao, Lintao Zhang, Sharad Malik: Chaff: engineering an efficient SAT solver. In: Proceedings of the 38th conference on Design automation â DAC â01. ACM Press, Las Vegas NV 2001, ISBN 1-58113-297-2, S. 530â535, doi:10.1145/378239.379017.
cite-note-2323. â Gilles Audemard, Laurent Simon: Predicting Learnt Clauses Quality in Modern SAT Solvers. In: Proceedings of the 21st International Joint Conference on Artificial Intelligence (IJCAI). 2009.
cite-note-2424. â B. Selman, H. J. Levesque, D. G. Mitchell: A new method for solving hard satisfiability problems. 10th AAAI. San Jose CA 1992, S. 440â446.
cite-note-2525. â K Keefe: Local search strategies for equational satisfiability. Office of Scientific and Technical Information (OSTI), 21. September 2004.
cite-note-2727. â The International SAT Competition Web Page
cite-note-2828. â The International Conferences on Theory and Applications of Satisfiability Testing (SAT)
cite-note-2929. â Katalin Fazekas, Armin Biere, Christoph Scholl: Incremental Inprocessing in SAT Solving. In: Theory and Applications of Satisfiability Testing â SAT 2019 (= Lecture Notes in Computer Science). Springer International Publishing, Cham 2019, ISBN 978-3-03024258-9, S. 136â154, doi:10.1007/978-3-030-24258-9_9.
cite-note-3030. â The SAT Association